package com.whcoding.test.common;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * 正则表达式验证
 */
public class RegExpValidatorUtils {


	/**
	 * 验证电话号码
	 *
	 * @param str
	 * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
	 */
	public static boolean isTelephone(String str) {
		String regex = "((^([0-9]{3}-)?[0-9]{8}$)|(^([0-9]{4}-)?[0-9]{7}$)|(^[1]{1}[3-9]{1}[0-9]{9}$))";
		return match(regex, str);
	}

	/**
	 * 验证decimal（8,2）类型
	 *
	 * @param str 要验证的字符串
	 * @return
	 */
	public static boolean isDecimal8_2(String str) {
		String regex = "^([0-9]{1,6})([.]{1}[0-9]{1,2})?$";
		return match(regex, str);
	}

	/**
	 * 验证decimal（12,2）类型
	 *
	 * @param str 要验证的字符串
	 * @return
	 */
	public static boolean isDecimal_12_2(String str) {
		String regex = "^([0-9]{1,10})?([.]{1}[0-9]{1,2})?$";
		return match(regex, str);
	}

	/**
	 * 验证正整数
	 *
	 * @param str 要验证的字符串
	 * @return
	 */
	public static boolean validatorIntNum(String str) {
		String regex = "^[0-9]*$";
		return match(regex, str);
	}

	/**
	 * 验证身份证号
	 *
	 * @param str 要验证的字符串
	 * @return
	 */
	public static boolean isIdCardNum(String str) {
		String regex = "(^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$)";
		return match(regex, str);
	}

	/**
	 * 验证数字或字母验证
	 *
	 * @param str 要验证的字符串
	 * @return
	 */
	public static boolean isNumAndEnglish(String str) {
		String regex = "^[0-9a-zA-Z]*$";
		return match(regex, str);
	}

	/**
	 * 验证邮箱
	 *
	 * @param str 要验证的字符串
	 * @return
	 */
	public static boolean isMail(String str) {
		String regex = "^[a-zA-Z0-9]+([-_.][a-zA-Z0-9]+)*@([a-zA-Z0-9]+[-.])+[a-zA-Z0-9]{2,5}$";
		return match(regex, str);
	}

	/**
	 * 验证特殊字符
	 *
	 * @param str 要验证的字符串
	 * @return
	 */
	public static boolean isExcludeSpecial(String str) {
		String regex = "^[a-zA-Z0-9\\u4e00-\\u9fa5]+$";
		return match(regex, str);
	}

	/**
	 * @param regex 正则表达式字符串
	 * @param str   要匹配的字符串
	 * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
	 */
	private static boolean match(String regex, String str) {
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(str);
		return matcher.matches();
	}

	/**
	 * 删除标点符号
	 */
	public static String removePunctuation(String str) {
		String s = ":\\\\/.&*(()/*`~?<|{:。}>-,';][=-!#$%^&*+@\\";
		s = s.replaceAll("[\\pP\\p{Punct}]", "");
		System.out.println("start:" + s + ":end");
		str.replaceAll("[\\pP\\p{Punct}]", "");
		return str;
	}
}
